开始做之前不知道是简单题,因为没看wp,既然做了,就发出来吧
exp之前
NX + CANARY
CANARY很多时候直接覆盖argv即可
1 | gdb-peda$ checksec |
main函数,两个函数,一个读取flag文件到bss全局变量上,另一个是漏洞函数
1 | int __cdecl main() |
漏洞函数,name存在溢出,不过有strlen检测,这个00截断,很容易绕过
1 | int vuln() |
开始
本地测试先生成flag文件
1 | echo "flag{whatiscanary}" > flag |
我们运行起来看看,看看flag是不是在那
1 | gdb-peda$ x /s 0x804A0A0 |
由于canary会输出argv中的程序名,那么这题覆盖argv为flag地址即可
偏移计算
1 | char name; // [sp+Ch] [bp-2Ch]@1 |
python手算
1 | >>> 0x2c |
其中4为ebp占用4字节
所以最终payload
1 | # -*- coding: utf-8 -*- |
结果:
1 | root@kali:~/learn/pwn/HBCTFwhatiscanary# python exp.py |